Java SE 7 又提供了這個偷懶的方法,那使用上有什麼例外或限制嗎?
在 Java 裡,所有的數字類別(Integer, Long, Float, Double 等),都是繼承 Number 類別,還記得前兩天的 Constants 類別嗎?我們想說讓 Constant 類別更有彈性一點,所以寫了下面這樣的程式碼:
package idv.jacky.ironman4;
import idv.jacky.ironman4.day17.Constant;
public class Day19Example {
public static void main(String[] args) {
Constant<Double> pi = new Constant<>(3.14);
Constant<Number> c = new Constant<>(3.14);
}
}
既然 Double 是一種 Number,那程式碼第10行應該沒問題吧?不過,在編譯時,我們遇到這樣的錯誤訊息:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from Constant<Double> to Constant<Number>
at idv.jacky.ironman4.Day19Example.main(Day19Example.java:10)
怎麼會!根據 Java 多型的特性,Double 應該可以轉型成 Number 物件啊!例如:
Number n = new Double(3.14);
很不幸地,泛型就是要你指定確定的單一型別,所以像 Constant<Double> 這種複合型別是沒辦法自動轉型的,因此我們還是得乖乖地指定確定的型別才行。